*! xcorr -- Cross correlations with p-values.     STB-13: sts3
*! version 1.0.0     Sean Becketti     April 11, 1993
program define xcorr
	version 3.0
	local varlist "req ex min(2) max(2)"
	local if "opt"
	local in "opt"
        local options "Kendall Lags(int 0) Pearson Spearman"
	parse "`*'"
        if (`lags'<=0) {
                qui period
                if ($S_1>1) {local lags = $S_1}
                else {local lags = 4}
        }
	local corr "pearson"
	if ("`spearma'"!="") {local corr "spear"}
	if ("`kendall'"!="") {local corr "ktau"}
	local sfn "$S_FN"
	tempfile user
	quietly save `user'
	capture {
		mac def S_1
		mac def S_2
		mac def S_3
		parse "`varlist'", parse(" ")
		count if `1'!=. & `2'!=.
		if (_result(1)<2+`lags') {
			noi di in re "Not enough observations"
			error 99
		}
                noi di in gr _col(12) "lags of" _col(31) "lags of"
                noi di in ye _col(12) "`1'" _col(31) "`2'"
                noi di in gr "Lag" _col(10) "r" _col(15) "p-value" _col(29) "r" _col(34) "p-value"
                noi di in gr "---" _col(8) "-----" _col(15) "-------" _col(27) "-----" _col(34) "-------"
		`corr' `1' `2' `if' `in'
		local r0 = $S_4
		local p0 = $S_5
		noi di in ye " 0" _col(8) %5.2f =`r0' _col(16)  %5.2f =`p0'
		lag `lags' `1'
		lag `lags' `2'
		local lagx "`1'"
		local lagy "`2'"
		local i=0
		while (`i'<`lags') {
		 	local i=`i'+1
			_addl `lagx'
			local lagx "$S_1"
			_addl `lagy'
			local lagy "$S_1"
			local j=2*`i' - 1
			`corr' `2' `lagx' `if' `in'
			local r`j' = $S_4
			local p`j' = $S_5
			local k=`j'+1
			`corr' `1' `lagy' `if' `in'
			local r`k' = $S_4
			local p`k' = $S_5
			noi di in ye %2.0f =`i' _col(8) %5.2f =`r`j'' _col(16)  %5.2f =`p`j'' _col(27) %5.2f =`r`k'' _col(35) %5.2f =`p`k''
		}
	}
	local rc = _rc
	quietly use `user', clear
	erase `user'
	mac def S_FN "`sfn'"
	error `rc'
        mac def S_1 "`r0'"
        mac def S_2 "`p0'"
        local i=0
        while (`i'<`lags') {
		local i=`i'+1
                local j=4*(`i'-1)+3
                local k=2*(`i'-1)+1
                mac def S_`j' "`r`k''"
                local j=`j'+1
                mac def S_`j' "`p`k''"
                local k=`k'+1
                local j=`j'+1
                mac def S_`j' "`r`k''"
                local j=`j'+1
                mac def S_`j' "`p`k''"
        }
end
